/**
 * Class：它的主要结构只有 构造函数、属性、方法和访问符（Accessor）
 * 属性的类型标注 类似于 变量，
 * 而构造函数、方法、存取器的类型编标注类似于函数：
 * 
 * 唯一需要注意的是，setter 方法不允许进行返回值的类型标注
 * 
 * 类的方法同样可以进行函数那样的重载，
 * 就像函数可以通过函数声明与函数表达式创建一样，类也可以通过类声明和类表达式的方式创建
 * 
*/
//类声明
class Foo {
    prop: string;

    constructor(inputProp: string) {
        this.prop = inputProp;
    }

    print(addon: string): void {
        console.log(`${this.prop} and ${addon}`)
    }

    get propA(): string {
        return `${this.prop}+A`;
    }

    set propA(value: string) {
        this.prop = `${value}+A`
    }
}
//类表达式
const FooA = class {
    prop: string;

    constructor(inputProp: string) {
        this.prop = inputProp;
    }

    print(addon: string): void {
        console.log(`${this.prop} and ${addon}`)
    }

    // ...
}

//export {}：解决“无法重新声明块范围变量”错误提示问题
export {}
